package com.hissy.common.design.structure.flyweight;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by zhangyanfei on 2019/4/10.
 * 核心总结，可以共享的对象，也就是说返回的同一类型的对象其实是同一实例，当客户端要求生成一个对象时，
 * 工厂会检测是否存在此对象的实例，如果存在那么直接返回此对象实例，
 * 如果不存在就创建一个并保存起来，这点有些单例模式的意思。
 * 通常工厂类会有一个集合类型的成员变量来用以保存对象，
 * 如hashtable,vector等。在java中，数据库连接池，线程池等即是用享元模式的应用。
 * @author zhangyanfei
 * @date 2019/04/10
 */
public class FlyweightFactory {
    private Map<String, Flyweight> flyweightMap = new HashMap<>();

    public FlyweightFactory() {

    }

    public Flyweight getFlyweight(String tag) {
        // 享元模式经典写法
        return flyweightMap.computeIfAbsent(tag, FlyweightImpl::new);
    }
}
